<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* promise构造函数原型对象上的方法：
        -then方法
         -then方法是同步绑定的。但是then中的回调函数是异步的，需要等到调用then的promise实例状态发生改变
         -then方法接受的两个回调函数，分别处理成功promise实例和失败promise实例的逻辑
         -then接受的两个回调函数接受的两个参数，分别是成功promise的值与失败的时候的值
        then的返回值
        -then
        1.then默认返回一个成功状态的promise实例，值是回调函数的返回值
        2.当then中的回调返回一个promise实例的时候，则then方法的返回值，和这个promise实例保持一致
        3.当then中有报错但是没有被处理的时候，则then直接返回失败的promise实例，值为错误的信息
         
        
        
        
        -catch
        -finally     
        */
        //创建一个promise的回调函数
        const p = new Promise((resolve, reject) => {
            try {
                console.log('同步执行');
                // throw new Error('我自己造个错误');
                setTimeout(() => {
                    console.log('异步执行，我是第一个定时器')
                    resolve('成功了')
                }, 2000);
            } catch (e) {
                reject('失败了')
            }
        })
        // 问题如果得到处理了，就不会报错，第一参数处理成功的，第二个参数处理失败的
        // then方法默认返回成功的状态
        const p1 = p.then((value) => {
            const re = new Promise((resolve, reject) => {
                console.log('我感受到了你成功了', value)
                try {
                    throw new Error('第二个错误')
                    setTimeout(() => {
                        console.log('我是第二个定时器');
                        resolve('p1执行了')
                    }, 2000);
                } catch (e) {
                    reject(e.message)
                }
            })
            return re
        }, (reason) => {
            console.log('你失败了，以科修', reason)
        })
        // p1.then(
        //     (value) => { 

        //     }, 
        // (reason) => {

        // })
    </script>
</body>

</html>